package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 审核任务类型枚举
 *
 * <p>定义评分系统中的审核任务类型，用于分类不同类型的审核任务。</p>
 *
 * @author System
 * @version 1.0.0
 * @since 2025-11-17
 */
public enum AuditTaskType implements BaseEnum {

    /**
     * 成绩录入
     */
    GRADE_ENTRY("GRADE_ENTRY", "成绩录入"),

    /**
     * 成绩审核
     */
    GRADE_REVIEW("GRADE_REVIEW", "成绩审核"),

    /**
     * 成绩修改
     */
    GRADE_MODIFICATION("GRADE_MODIFICATION", "成绩修改"),

    /**
     * 成绩删除
     */
    GRADE_DELETION("GRADE_DELETION", "成绩删除"),

    /**
     * 成绩确认
     */
    GRADE_CONFIRMATION("GRADE_CONFIRMATION", "成绩确认"),

    /**
     * 成绩发布
     */
    GRADE_PUBLISH("GRADE_PUBLISH", "成绩发布"),

    /**
     * 成绩锁定
     */
    GRADE_LOCK("GRADE_LOCK", "成绩锁定"),

    /**
     * 成绩解锁
     */
    GRADE_UNLOCK("GRADE_UNLOCK", "成绩解锁"),

    /**
     * 成绩归档
     */
    GRADE_ARCHIVE("GRADE_ARCHIVE", "成绩归档"),

    /**
     * 成绩查询
     */
    GRADE_QUERY("GRADE_QUERY", "成绩查询"),

    /**
     * 成绩导出
     */
    GRADE_EXPORT("GRADE_EXPORT", "成绩导出"),

    /**
     * 成绩导入
     */
    GRADE_IMPORT("GRADE_IMPORT", "成绩导入"),

    /**
     * 评分标准审核
     */
    GRADING_STANDARD_REVIEW("GRADING_STANDARD_REVIEW", "评分标准审核"),

    /**
     * 评分规则审核
     */
    GRADING_RULE_REVIEW("GRADING_RULE_REVIEW", "评分规则审核"),

    /**
     * 申诉处理
     */
    APPEAL_PROCESSING("APPEAL_PROCESSING", "申诉处理"),

    /**
     * 数据一致性审核
     */
    DATA_CONSISTENCY_REVIEW("DATA_CONSISTENCY_REVIEW", "数据一致性审核");

    private final String code;
    private final String description;

    AuditTaskType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 判断是否为成绩相关任务
     *
     * @return 是否为成绩相关任务
     */
    public boolean isGradeRelated() {
        return this.name().startsWith("GRADE_");
    }

    /**
     * 根据编码获取对应的枚举
     *
     * @param code 编码
     * @return 对应的枚举
     */
    public static AuditTaskType fromCode(String code) {
        for (AuditTaskType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("Unknown audit task type code: " + code);
    }

    @Override
    public String toString() {
        return this.code + "(" + this.description + ")";
    }
}
